﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;

namespace FXnaEngine.Physics
{
    /// <summary>
    /// Descriptor for physics actors.
    /// </summary>
    public class ActorDesc
    {
        private Vector3 position = Vector3.Zero;
        private Matrix orientation = Matrix.Identity;
        private float density;
        private bool dynamic;
        private bool phantom;
        private bool character;
        private Int64 entityID;
        private FGame game;
        private readonly List<ShapeDesc> shapes = new List<ShapeDesc>();

        /// <summary>
        /// Initial position of the actor.
        /// </summary>
        public Vector3 Position
        {
            get { return this.position; }
            set { this.position = value; }
        }

        /// <summary>
        /// Initial orientation of the actor, as a transformation matrix.
        /// </summary>
        public Matrix Orientation
        {
            get { return this.orientation; }
            set { this.orientation = value; }
        }

        /// <summary>
        /// Initial density of the actor.
        /// </summary>
        public float Density
        {
            get { return this.density; }
            set { this.density = value; }
        }

        /// <summary>
        /// Dynamic flag.  True is mobile, false is static.
        /// </summary>
        public bool Dynamic
        {
            get { return this.dynamic; }
            set { this.dynamic = value; }
        }

        /// <summary>
        /// Whether or not this actor's skin will be a PhantomSkin or just plain CollisionSkin
        /// </summary>
        public bool Phantom
        {
            get { return this.phantom; }
            set { this.phantom = value; }
        }

        /// <summary>
        /// Whether or not this actor will load as a character or not
        /// </summary>
        public bool Character
        {
            get { return this.character; }
            set { this.character = value; }
        }

        /// <summary>
        /// The ID of the entity the physics body will be part of
        /// </summary>
        public Int64 EntityID
        {
            get { return this.entityID; }
            set { this.entityID = value; }
        }

        /// <summary>
        /// Contains a reference of to the game
        /// </summary>
        public FGame Game
        {
            get { return this.game; }
            set { this.game = value; }
        }

        /// <summary>
        /// List of shapes that compose the actor.
        /// </summary>
        public List<ShapeDesc> Shapes
        {
            get { return this.shapes; }
        }
    }
}
